#!/usr/bin/python
# -*- coding: UTF-8 -*-

# 迭代器

# 迭代器是一个可以记住遍历的位置的对象。
# 迭代器对象从集合的第一个元素开始访问，直到所有的元素被访问完结束。迭代器只能往前不会后退。
# 迭代器有两个基本的方法：iter() 和 next()。
# 字符串，列表或元组对象都可用于创建迭代器，通过 iter() 函数获取迭代器对象。

# 创建迭代器
s = 'hello'
s_iter = s.__iter__()  # 创建迭代器对象
s_iter.__next__()  # 返回迭代器的第一个元素
s_iter.__next__()  # 返回迭代器的第二个元素
s_iter.__next__()  # 返回迭代器的第三个元素
s_iter.__next__()  # 返回迭代器的第四个元素
s_iter.__next__()  # 返回迭代器的第五个元素     # 迭代器的最后一个元素会抛出 StopIteration 异常

# 也可以使用 iter() 函数创建迭代器对象
it = iter(s)

# 迭代器的基本用法
print(next(it))  # h
print(next(it))  # e
print(next(it))  # l
print(next(it))  # l
print(next(it))  # o

# 如果迭代器的所有元素都已经被访问完，则会抛出 StopIteration 异常。
# 捕获 StopIteration 异常可以避免程序中断。

# 迭代器的特性
# 迭代器只能往前不会后退。
# 迭代器只能遍历一次。
# 创建迭代器后，其余代码都不会再受到影响。

# 迭代器的应用
# 迭代器可以用于遍历集合中的元素，常见的应用有：
# 1. 访问集合中的元素
# 2. 对集合进行过滤和映射
# 3. 创建新的集合
# 4. 计算集合的长度和总和
# 5. 实现惰性计算
# 6. 节省内存
# 7. 并行计算

